package com.mrcoder.sbmexcel.utils.excel;

/*     */
/*     */ import java.math.BigDecimal;
/*     */ import java.math.RoundingMode;
/*     */ import java.text.DecimalFormat;
/*     */ import java.util.regex.Pattern;
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */
/*     */ public abstract class BigDecimalUtils
        /*     */ {
    /*     */   public static final int SYSTEM_SCALE = 6;
    /*     */   public static final int PAGE_SCALE = 2;
    /*     */   public static final String DefaultNumberFormat = "#,###.##";
    /*  37 */   public static final BigDecimal SYSTEM_ZERO = BigDecimal.valueOf(0L, 6);
    /*  38 */   public static final BigDecimal ONE_HUNDRAD = BigDecimal.valueOf(100L);
    /*  39 */   public static final BigDecimal NEGATIVE_ONE = BigDecimal.valueOf(-1L);
    /*     */
    /*  41 */   private static ThreadLocal<DecimalFormat> localFormatter = new ThreadLocal<DecimalFormat>()
            /*     */     {
        /*     */       protected DecimalFormat initialValue() {
            /*  44 */         return new DecimalFormat("#,###.##");
            /*     */       }
        /*     */     };
    /*     */
    /*     */   public static BigDecimal systemScale(BigDecimal val) {
        /*  49 */     if (val == null) return null;
        /*  50 */     return val.setScale(6, RoundingMode.HALF_UP);
        /*     */   }
    /*     */
    /*     */   public static BigDecimal pageScale(BigDecimal val) {
        /*  54 */     if (val == null) return null;
        /*  55 */     return val.setScale(2, RoundingMode.DOWN);
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static boolean notZero(BigDecimal val) {
        /*  62 */     if (val == null || BigDecimal.ZERO == val) {
            /*  63 */       return false;
            /*     */     }
        /*  65 */     int scale = val.scale();
        /*  66 */     if (scale <= 6) {
            /*  67 */       BigDecimal zero = zeroByScale(scale);
            /*  68 */       return (val.compareTo(zero) > 0);
            /*     */     }
        /*  70 */     BigDecimal valScaled = systemScale(val);
        /*  71 */     return (valScaled.compareTo(SYSTEM_ZERO) > 0);
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static boolean isNegative(BigDecimal val) {
        /*  79 */     if (val == null || BigDecimal.ZERO == val) {
            /*  80 */       return false;
            /*     */     }
        /*  82 */     int scale = val.scale();
        /*  83 */     if (scale <= 6) {
            /*  84 */       BigDecimal zero = zeroByScale(scale);
            /*  85 */       return (val.compareTo(zero) < 0);
            /*     */     }
        /*  87 */     BigDecimal valScaled = systemScale(val);
        /*  88 */     return (valScaled.compareTo(SYSTEM_ZERO) < 0);
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static boolean isZero(BigDecimal val) {
        /*  96 */     if (val == null || BigDecimal.ZERO == val) {
            /*  97 */       return true;
            /*     */     }
        /*  99 */     int scale = val.scale();
        /* 100 */     if (scale <= 6) {
            /* 101 */       BigDecimal zero = zeroByScale(scale);
            /* 102 */       return (val == zero || val.compareTo(zero) == 0);
            /*     */     }
        /* 104 */     BigDecimal valScaled = systemScale(val);
        /* 105 */     return (valScaled == SYSTEM_ZERO || valScaled.compareTo(SYSTEM_ZERO) == 0);
        /*     */   }
    /*     */
    /*     */
    /*     */
    /* 110 */   public static BigDecimal defaultZero(BigDecimal val) { return isZero(val) ? SYSTEM_ZERO : val; }
    /*     */
    /*     */
    /*     */   private static BigDecimal zeroByScale(int scale) {
        /* 114 */     if (scale >= 0) {
            /* 115 */       return (scale <= 6) ? zeroScaled6[scale] : SYSTEM_ZERO;
            /*     */     }
        /* 117 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static boolean equals(BigDecimal val1, BigDecimal val2) {
        /* 125 */     if (val1 == val2 || (val1 == null && val2 == null)) {
            /* 126 */       return true;
            /*     */     }
        /* 128 */     if (val1 != null && val2 != null) {
            /* 129 */       int scale1 = val1.scale(), scale2 = val2.scale();
            /* 130 */       if (scale1 == scale2) {
                /* 131 */         if (scale1 <= 6) {
                    /* 132 */           return val1.equals(val2);
                    /*     */         }
                /* 134 */         return systemScale(val1).equals(systemScale(val2));
                /*     */       }
            /*     */
            /* 137 */       BigDecimal diff = val1.subtract(val2).abs();
            /* 138 */       return isZero(diff);
            /*     */     }
        /*     */
        /* 141 */     return false;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static boolean greater(BigDecimal val1, BigDecimal val2) {
        /* 152 */     if (val1 == val2 || val1 == null || val2 == null) {
            /* 153 */       return false;
            /*     */     }
        /*     */
        /* 156 */     if (val1.scale() == val2.scale()) {
            /* 157 */       return (val1.compareTo(val2) > 0);
            /*     */     }
        /* 159 */     BigDecimal diff = val1.subtract(val2);
        /* 160 */     return notZero(diff);
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /* 171 */   public static boolean less(BigDecimal val1, BigDecimal val2) { return greater(val2, val1); }
    /*     */
    /*     */
    /*     */
    /* 175 */   public static BigDecimal max(BigDecimal val1, BigDecimal val2) { return greater(val1, val2) ? val1 : val2; }
    /*     */
    /*     */
    /*     */
    /* 179 */   public static BigDecimal min(BigDecimal val1, BigDecimal val2) { return greater(val1, val2) ? val2 : val1; }
    /*     */
    /*     */
    /*     */
    /* 183 */   public static boolean inRange(BigDecimal val, BigDecimal min, BigDecimal max) { return (greater(val, min) && less(val, max)); }
    /*     */
    /*     */
    /*     */
    /* 187 */   public static boolean outRange(BigDecimal val, BigDecimal min, BigDecimal max) { return (less(val, min) || greater(val, max)); }
    /*     */
    /*     */
    /*     */   public static BigDecimal add(BigDecimal val1, BigDecimal val2) {
        /* 191 */     if (isZero(val1)) return defaultZero(val2);
        /* 192 */     if (isZero(val2)) return defaultZero(val1);
        /* 193 */     return val1.add(val2);
        /*     */   }
    /*     */
    /*     */   public static BigDecimal subtract(BigDecimal val1, BigDecimal val2) {
        /* 197 */     if (isZero(val1)) return defaultZero(val2).negate();
        /* 198 */     if (isZero(val2)) return defaultZero(val1);
        /* 199 */     return val1.subtract(val2);
        /*     */   }
    /*     */
    /*     */   public static BigDecimal divide(BigDecimal amount, BigDecimal divisor) {
        /* 203 */     if (isZero(amount)) return amount;
        /*     */
        /* 205 */     if (notZero(divisor)) {
            /* 206 */       if (BigDecimal.ONE.equals(divisor)) {
                /* 207 */         return amount;
                /*     */       }
            /* 209 */       return amount.divide(divisor, 6, RoundingMode.HALF_UP);
            /*     */     }
        /* 211 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */   public static BigDecimal divide(BigDecimal amount, int divisor) {
        /* 215 */     if (divisor != 0) {
            /* 216 */       if (divisor == 1) {
                /* 217 */         return amount;
                /*     */       }
            /* 219 */       return divide(amount, valueOf(divisor));
            /*     */     }
        /* 221 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal[] divideAndRemainder(BigDecimal amount, BigDecimal divisor) {
        /* 229 */     if (isZero(amount)) return ZERO_ARRAY;
        /*     */
        /* 231 */     if (notZero(divisor)) {
            /* 232 */       return amount.divideAndRemainder(divisor);
            /*     */     }
        /* 234 */     return ZERO_ARRAY;
        /*     */   }
    /*     */
    /* 237 */   private static BigDecimal[] ZERO_ARRAY = { BigDecimal.ZERO, BigDecimal.ZERO };
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal[] divideAndRemainder(BigDecimal amount, int divisor) {
        /* 244 */     if (divisor != 0) {
            /* 245 */       return divideAndRemainder(amount, valueOf(divisor));
            /*     */     }
        /* 247 */     return ZERO_ARRAY;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal remainder(BigDecimal amount, BigDecimal divisor) {
        /* 255 */     if (isZero(amount)) return BigDecimal.ZERO;
        /*     */
        /* 257 */     if (notZero(divisor)) {
            /* 258 */       return amount.remainder(divisor);
            /*     */     }
        /* 260 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal remainder(BigDecimal amount, int divisor) {
        /* 268 */     if (divisor != 0) {
            /* 269 */       return remainder(amount, valueOf(divisor));
            /*     */     }
        /* 271 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */   public static BigDecimal multiply(BigDecimal amount, int multiplicand) {
        /* 275 */     if (multiplicand > 0) {
            /* 276 */       if (multiplicand == 1) {
                /* 277 */         return amount;
                /*     */       }
            /* 279 */       return multiply(amount, valueOf(multiplicand));
            /*     */     }
        /* 281 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */   public static BigDecimal multiply(BigDecimal amount, BigDecimal multiplicand) {
        /* 285 */     if (isZero(amount)) return BigDecimal.ZERO;
        /* 286 */     if (notZero(multiplicand)) {
            /* 287 */       if (BigDecimal.ONE.equals(multiplicand)) {
                /* 288 */         return amount;
                /*     */       }
            /* 290 */       BigDecimal ret = amount.multiply(multiplicand);
            /* 291 */       return ret.setScale(6, RoundingMode.HALF_UP);
            /*     */     }
        /* 293 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal percentOf(BigDecimal val, BigDecimal percentage) {
        /* 303 */     if (notZero(percentage)) {
            /* 304 */       return divide(multiply(val, percentage), 100);
            /*     */     }
        /* 306 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal discountOf(BigDecimal val, BigDecimal discount) {
        /* 316 */     if (notZero(discount)) {
            /* 317 */       BigDecimal multiplicand = valueOf(1).subtract(divide(discount, 100));
            /* 318 */       return multiply(val, multiplicand);
            /*     */     }
        /* 320 */     return val;
        /*     */   }
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */
    /*     */   public static BigDecimal negate(BigDecimal val) {
        /* 329 */     if (val == null) return null;
        /* 330 */     if (BigDecimal.ZERO == val) return BigDecimal.ZERO;
        /* 331 */     return val.negate();
        /*     */   }
    /*     */
    /*     */   public static String format(BigDecimal val) {
        /* 335 */     if (val == null) return "0";
        /* 336 */     return ((DecimalFormat)localFormatter.get()).format(val);
        /*     */   }
    /*     */
    /*     */
    /* 340 */   public static BigDecimal valueOf(double val) { return systemScale(new BigDecimal(val)); }
    /*     */
    /*     */
    /*     */   public static BigDecimal valueOf(int val) {
        /* 344 */     if (val >= 0 && val <= 24) {
            /* 345 */       return zeroThrough24[val];
            /*     */     }
        /* 347 */     if (val == 100) {
            /* 348 */       return ONE_HUNDRAD;
            /*     */     }
        /* 350 */     return BigDecimal.valueOf(val);
        /*     */   }
    /*     */
    /*     */
    /* 354 */   public static final Pattern BigDecimalRegex = Pattern.compile("[+-]?(?:\\d+(?:\\.\\d*)?|\\.\\d+)(?:[eE][+-]?\\d+)?");
    /*     */   public static BigDecimal valueOf(String input) {
//        /* 356 */     if (StringUtils.isEmpty(input)) {
//            /* 357 */       return BigDecimal.ZERO;
//            /*     */     }
        /* 359 */     String s = (input.indexOf(',') > 0) ? input.replaceAll(",", "") : input;
        /* 360 */     if (BigDecimalRegex.matcher(s).matches()) {
            /*     */       try {
                /* 362 */         return new BigDecimal(s);
                /* 363 */       } catch (Exception exception) {}
            /*     */     }
        /*     */
        /*     */
        /* 367 */     return BigDecimal.ZERO;
        /*     */   }
    /*     */
    /*     */   private static final BigDecimal[] zeroThrough24 = {
/* 371 */       BigDecimal.valueOf(0L),
/* 372 */       BigDecimal.valueOf(1L),
/* 373 */       BigDecimal.valueOf(2L),
/* 374 */       BigDecimal.valueOf(3L),
/* 375 */       BigDecimal.valueOf(4L),
/* 376 */       BigDecimal.valueOf(5L),
/* 377 */       BigDecimal.valueOf(6L),
/* 378 */       BigDecimal.valueOf(7L),
/* 379 */       BigDecimal.valueOf(8L),
/* 380 */       BigDecimal.valueOf(9L),
/* 381 */       BigDecimal.valueOf(10L),
/* 382 */       BigDecimal.valueOf(11L),
/* 383 */       BigDecimal.valueOf(12L),
/* 384 */       BigDecimal.valueOf(13L),
/* 385 */       BigDecimal.valueOf(14L),
/* 386 */       BigDecimal.valueOf(15L),
/* 387 */       BigDecimal.valueOf(16L),
/* 388 */       BigDecimal.valueOf(17L),
/* 389 */       BigDecimal.valueOf(18L),
/* 390 */       BigDecimal.valueOf(19L),
/* 391 */       BigDecimal.valueOf(20L),
/* 392 */       BigDecimal.valueOf(21L),
/* 393 */       BigDecimal.valueOf(22L),
/* 394 */       BigDecimal.valueOf(23L),
/* 395 */       BigDecimal.valueOf(24L) };
    /*     */
    /*     */
    /*     */
    /* 399 */   private static final BigDecimal[] zeroScaled6 = { BigDecimal.valueOf(0L, 0),
/* 400 */       BigDecimal.valueOf(0L, 1),
/* 401 */       BigDecimal.valueOf(0L, 2),
/* 402 */       BigDecimal.valueOf(0L, 3),
/* 403 */       BigDecimal.valueOf(0L, 4),
/* 404 */       BigDecimal.valueOf(0L, 5),
/* 405 */       BigDecimal.valueOf(0L, 6) };
    /*     */ }


/* Location:              D:\qm\PKQ\common\required-lib\framework-core-5.0.0.jar!/org/framework/core/util/BigDecimalUtils.class
 * Java compiler version: 8 (52.0)
 * JD-Core Version:       1.0.7
 */